﻿using GestorSQL.BusinessEntities;
using System;
using System.Collections.Generic;

namespace GestorSQL.DAO
{
    public interface IGestorSqlDao
    {
        #region Caso
        void CreateCase(Caso caso);
        Caso GetCase(string caseNumber);
        void SaveCase(Caso caso);
        List<Caso> GetCaseListByUserNameAndRoles(string userName, string[] roles);
        void SetCaseState(string caseNumber, Historia state);
        #endregion

        #region Conexion
        List<Ambiente> GetEnvironmentList(string[] roles);
        List<string> GetServerListByEnvironment(Ambiente environment);
        List<string> GetConnectionListByServerAndEnvironment(Ambiente environment, string server);
        List<string> GetServerList();
        List<string> GetConnectionListByCore(int idCore);
        List<string> GetServerListByCore(int idCore);


        List<Conexion> GetConnectionList();
        List<Core> GetCoreList();
        Conexion GetConnection(string connectionName);
        Conexion GetConnection(int idConnection);
        Resultado SaveConnection(Conexion connection);
        Resultado RemoveConnection(string connectionName);



        #endregion

        #region Query
        List<Query> GetQueriesByCase(string caseNumber);
        long SaveQuery(Query query);
        bool SaveQueryComment(long idQuery, string comment);
        #endregion

        #region Misc
        DateTime GetDataBaseDateTime();
        #endregion

        #region Parameteres
        Resultado UpdateParameter(Parametro parametro);
        List<Parametro> GetListParameters();
        string GetValueFromParameter(string codigo);
        object GetParameter(string key);
        #endregion

        #region Security

        List<UserInRole> GetUsersList();
        List<Role> GetRoleList();
        List<UserInRole> GetUserInRoleList();
        Resultado SaveUsersInRoles(List<UserInRole> userInRoleList);
        Resultado DeleteUsersInRole(string userName);

        #endregion

        #region Log

        long SaveLog(Log log);

        #endregion

        #region ConjuntoSolucion


        Resultado SaveConjuntoSolucion(ConjuntoSolucion conjuntoSolucion);

        Resultado SaveConjuntosSolucion(List<ConjuntoSolucion> conjuntoSolucionList);

        #endregion

        #region Solucion

        Resultado UpdateSolution(Solucion solucion);
        Solucion GetSolucionByCase(Caso caso);
        long SaveSolution(Solucion solucion);
        List<Log> GetLogsByBySolution(long idSolution);



        #endregion

        #region Asignaciones

        Resultado SaveAssignment(string userName);
        Asignacione GetAssignment(string userName);
        Resultado RemoveAssignment(string userName);
        List<Asignacione> GetAssignmentList();
        Resultado UpdateAssigment(string userName, int casosActivos);

        #endregion

        #region Core
        Core GetCoreById(int coreId);
        #endregion


        #region Consultas
            List<ConsultaCaso> ViewCasesByParameters(string caseNumber, string usuarioAnalista, string usuarioDueño, DateTime? fechaInicio, DateTime? fechaFin, bool soloEjecucionesAsistidas);
        #endregion

    }
}
